5
תגובות

שאלה לגבי לולאות for / in

פתח nevos12 ,
אהלן אני לומד כרגע java script באתר codecademy ובאחת השיעורים נתקעתי במשהו שלא הבנתי אם אפשר בבקשה עזרה
זה הקוד:

var friends = new Object;
friends.bill = {
  firstName: "Bill",
  lastName: "Gates",
  number: "(206) 555-5555",
  address: ['One Microsoft Way','Redmond','WA','98052']
};
friends.steve = {
  firstName: "Steve",
  lastName: "Jobs",
  number: "(408) 555-5555",
  address: ['1 Infinite Loop','Cupertino','CA','95014']
};

var search = function(name) {
  for(var prop in friends) {
    if(friends[prop].firstName === name) {
      console.log(friends[prop]);
      return friends[prop];
    };
  };
};
search("Steve");


הקוד בעצם אמור לחפש את השם סטיב מתוך הרשימה ולהדפיס (console.log) רק את הפרטים של סטיב.
שזה מה שהוא עושה שאני עושה בדיקה.
העניין זה למה הוא מדפיס את הפרטים רק של סטיב ולא גם את של ביל.
הרי friends[prop] זה בעצם גם סטיב וגם ביל

5 תשובות

avatar ענה Splash ב 14 לנובמבר 2014 #

אתה לא מסתכל על זה בצורה הנכונה

for(var prop in friends) {

החלק הזה יוצר משתנה בשם prop שמייצג בסך key של friend ספציפי.
מה שהלולאה בעצם עושה זה לרוץ על כל ה friends ולבדוק לאיזה friend הערך שלו ב firstName הוא Steve.

אז נכון ש friends[prop] מייצג את שניהם אבל כאשר אנחנו ב prop של ביל אז כאשר אנחנו בודקים מה ה firstName שלו ומשווים לסטיב אנחנו מקבלים false ולכן אתה לא רואה שום דבר בקונסול,לעומת זאת בהרצה השנייה של הלולאה ה prop כבר מייצג את סטיב וכאשר משווים את ה firstName שלו אז מקבלים true.

avatar ענה yossi787 ב 14 לנובמבר 2014 #

תודה רבה :)

avatar ענה nevos12 ב 14 לנובמבר 2014 #

תודה רבה! דרך אגב למה עושים את הסוגריים המרובעים דוגמת friends[prop].firstName
ולא friends.prop.firstName

avatar ענה Splash ב 14 לנובמבר 2014 #

זה בעיה משום ש prop הוא string והמנוע של js לא מצליח להבין מה אתה רוצה ממנו.
באותה מידה גם -

var name = 'steve'
      console.log(friends.name);

לא יעבווד

avatar ענה nevos12 ב 14 לנובמבר 2014 #

הבנתי! תודה רבה!